/*
 * VentanaPrincipal.h
 *
 *  Created on: 25/11/2009
 *      Author: luis
 */

#ifndef VENTANAPRINCIPAL_H_
#define VENTANAPRINCIPAL_H_

#include <gtkmm.h>
#include "Boton.h"
#include "../Constantes.h"
#include "../XML/ParserXml.h"
#include <string>
#include <cstring>
#include "../Controlador/ControladorBotonAnd.h"
#include "../Controlador/ControladorBotonOr.h"
#include "../Controlador/ControladorBotonNot.h"
#include "../Controlador/ControladorBotonXor.h"
#include "../Controlador/ControladorBotonEntrada.h"
#include "../Controlador/ControladorBotonSalida.h"
#include "../Controlador/ControladorBotonTraslacion.h"
#include "../Controlador/ControladorBotonBorrar.h"
#include "../Controlador/ControladorBotonCable.h"
#include "../Controlador/ControladorBotonSimular.h"
#include "../Controlador/ControladorBotonRotar.h"
#include "../Controlador/ControladorBotonCajaNegra.h"
#include "../Controlador/ControladorBotonSeleccion.h"
#include "../Comunicaciones/Cliente.h"
#include "AreaDibujo.h"
#include "PrintWindow.h"
#include "../Modelo/Circuito.h"


class VentanaPrincipal: public Gtk::Window {
private:

	/*
	 * Elementos auxiliares para controlar la ventana principal
	 */
	AreaDibujo* areas[CANT_MAX_AREAS];
	int contador_areas;
	int area_actual;
	Cliente cliente_programa;
	bool abriendo_externo;

	//Fija cuales de las zolapas abiertas son explosiones de elementos externos
	bool explosiones[CANT_MAX_AREAS];


	//Elementos de la vista de la ventana principal
	Gtk::Notebook tabs;

	//Botones de compuertas
	Boton boton_and, boton_or, boton_xor, boton_not, boton_in, boton_out,boton_cable, boton_caja_negra;

	//Botones de funcion
	Boton boton_rotar, boton_traslacion, boton_borrar, boton_seleccionar, boton_simular;

	//Elementos para el menu
	Gtk::HBox botonera;
	Gtk::VBox caja_elementos;
	Glib::RefPtr<Gtk::UIManager> m_refUIManager;
	Glib::RefPtr<Gtk::ActionGroup> m_refActionGroup;

public:

	VentanaPrincipal();

	void iniciar_areas();

	/*
	 * Funciones para crear la botonera y el menu de la ventana principal
	 */

	void construir_botonera();

	void construir_menu();

	/*
	 * Setea en false la variable si el elemento externo cuando ya ha sido abierto
	 */
	void externo_abierto(){
		this->abriendo_externo=false;
	}

	/*
	 * Activa la nueva area para que los botones actuen sobre ella
	 */
	void activar_nueva_area(AreaDibujo * area);

	/*
	 * Evento de cambio de zolapa
	 */
	void on_notebook_switch_page(GtkNotebookPage* , guint page_num);

	/*
	 * Funciones para manejar el menu
	 */
	void on_menu_new();

	void on_menu_open();

	void on_menu_save();

	void on_menu_print();

	void on_menu_delete_page();

	void on_menu_publish();

	void on_menu_about();

	/*
	 * Funcion que se utiliza para abrir un elemento externo
	 */
	int abrir_externo(char* archivo);

	virtual ~VentanaPrincipal();
};

#endif /* VENTANAPRINCIPAL_H_ */

